/*
 Navicat Premium Data Transfer

 Source Server         : TX
 Source Server Type    : MySQL
 Source Server Version : 80011
 Source Host           : 1.15.78.53:3306
 Source Schema         : db_blog

 Target Server Type    : MySQL
 Target Server Version : 80011
 File Encoding         : 65001

 Date: 10/07/2021 11:25:08
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_blog
-- ----------------------------
DROP TABLE IF EXISTS `t_blog`;
CREATE TABLE `t_blog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `summary` varchar(400) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `releaseDate` datetime DEFAULT NULL,
  `clickHit` int(11) DEFAULT NULL,
  `replyHit` int(11) DEFAULT NULL,
  `content` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `typeId` int(11) DEFAULT NULL,
  `keyWord` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `typeId` (`typeId`) USING BTREE,
  CONSTRAINT `t_blog_ibfk_1` FOREIGN KEY (`typeId`) REFERENCES `t_blogtype` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

-- ----------------------------
-- Records of t_blog
-- ----------------------------
BEGIN;
INSERT INTO `t_blog` VALUES (39, 'Spring', 'Spring 是一种轻量级开发框架，旨在提高开发人员的开发效率以及系统的可维护性。Spring 官网：https://spring.io/。\r\n    我们一般说 Spring 框架指的都是 Spring Framework，它是很多模块的集合，使用这些模块可以很方便地协助我们进行开发。这些模块是：核心容器、数据访问/集成,、Web、AOP（面向切面编程）、工具、消息和测试模块。比如：Core Container 中的 Core 组件是Spring 所有组件的核心，Beans 组件和 Context 组件是实现IOC和依赖注入的基础，AOP组件用来实现面向切面编程。', '2020-08-04 10:00:42', 33, 0, '<h1 id=\"spring\">Spring</h1>\r\n				<h2 id=\"ioc\">IoC</h2>\r\n				<p>IoC（Inverse of Control 控制反转）是一种设计思想，就是将原本在程序中手动创建对象的控制权，交由Spring框架来管理。IoC在其他语言中也有应用，并非Spring特有。IoC容器是Spring用来实现IoC的载体，IoC容器实际上就是一个Map（key，value），Map中存放的是各种对象。</p>\r\n				<p>将对象之间的相互依赖关系交给IoC容器来管理，并由IoC容器完成对象的注入。这样可以很大程度上简化应用的开发，把应用从复杂的依赖关系中解放出来。IoC容器就像是一个工厂一样，当我们需要创建一个对象的时候，只需要配置好的配置文件/注解即可，完全不用考虑对象是如何创建出来的。在实际项目中一个Service类可能有几百甚至上千个类作为他的底层，假如我们需要实例化这个Service，你可能要每次都要搞清这个Service所有的底层类的构造函数，这可能会把人逼疯。如果利用IoC的话，你只需要配置好，然后在需要的地方引用就行了，这大大增加了项目的可维护性且降低了开发难度。</p>\r\n				<h2 id=\"aop\">AOP</h2>\r\n				<p>AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关，却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来，便于减少系统的重复代码，降低模块间的耦合度，并有利于未来的可拓展性和可维护性。</p>\r\n				<p>Spring AOP就是基于动态代理的，如果要代理的对象，实现了某个接口，那么Spring AOP会使用JDK Proxy去创建代理对象，而对于没有实现接口的对象，就无法使用JDK Proxy去进行代理了，这时候Spring AOP会使用Cglib，这时候Spring AOP会使用Cglib生成一一个被代理对象的子类来作为代理。</p>\r\n				<h2 id=\"comment-和-bean-的区别\">@Comment 和 @Bean 的区别</h2>\r\n				<ol>\r\n				<li>\r\n				<p>作用对象不同：<code>@Component</code>注解作用于类，而<code>@Bean</code>注解作用于方法。</p>\r\n				</li>\r\n				<li>\r\n				<p><code>@Component</code>通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中（我们可以使用<code>@ComponentScan</code>注解定义要扫描的路径从中找出标识了需要装配的类自动装配到Spring的bean容器中）。<code>@Bean</code>注解通常是我们在标有该注解的方法中定义产生这个bean，<code>@Bean</code>告诉了Spring这是某个类的示例，当我需要用它的时候还给我。</p>\r\n				</li>\r\n				<li>\r\n				<p><code>@Bean</code>注解比Component注解的自定义性更强，而且很多地方我们只能通过<code>@Bean</code>注解来注册bean。比如当我们引用第三方库中的类需要装配到Spring容器时，则只能通过<code>@Bean</code>来实现。</p>\r\n				</li>\r\n				</ol>\r\n				<p><code>@Bean</code> 注解示例</p>\r\n				<div class=\"code-toolbar\"><pre class=\"line-numbers language-java\"><code class=\" language-java\"><span class=\"token annotation punctuation\">@Configuration</span>\r\n				<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">AppConfig</span> <span class=\"token punctuation\">{</span>\r\n					<span class=\"token annotation punctuation\">@Bean</span>\r\n					<span class=\"token keyword\">public</span> <span class=\"token class-name\">TransferService</span> <span class=\"token function\">transferService</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n						<span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">TransferServiceImpl</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\r\n					<span class=\"token punctuation\">}</span>\r\n\r\n				<span class=\"token punctuation\">}</span>\r\n				<span aria-hidden=\"true\" class=\"line-numbers-rows\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><div class=\"toolbar\"><div class=\"toolbar-item\"><span>Java</span></div><div class=\"toolbar-item\"><button>Copy</button></div></div></div>\r\n				<p>上面的代码相当于以下xml配置：</p>\r\n				<div class=\"code-toolbar\"><pre class=\"line-numbers language-xml\"><code class=\" language-xml\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>beans</span><span class=\"token punctuation\">&gt;</span></span>\r\n					<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>bean</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>transferService<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>cn.tsxygfy.TransferServiceImpl<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/&gt;</span></span>\r\n				<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>beans</span><span class=\"token punctuation\">&gt;</span></span>\r\n				<span aria-hidden=\"true\" class=\"line-numbers-rows\"><span></span><span></span><span></span></span></code></pre><div class=\"toolbar\"><div class=\"toolbar-item\"><span>XML</span></div><div class=\"toolbar-item\"><button>Copy</button></div></div></div>\r\n				<p>下面这个例子是通过<code>@Comment</code>无法实现的</p>\r\n				<div class=\"code-toolbar\"><pre class=\"line-numbers language-java\"><code class=\" language-java\"><span class=\"token annotation punctuation\">@Bean</span>\r\n				<span class=\"token keyword\">public</span> <span class=\"token class-name\">OneService</span> <span class=\"token function\">getService</span><span class=\"token punctuation\">(</span>status<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n					<span class=\"token keyword\">case</span> <span class=\"token punctuation\">(</span>status<span class=\"token punctuation\">)</span>  <span class=\"token punctuation\">{</span>\r\n						when <span class=\"token number\">1</span><span class=\"token operator\">:</span>\r\n								<span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token function\">serviceImpl1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\r\n						when <span class=\"token number\">2</span><span class=\"token operator\">:</span>\r\n								<span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token function\">serviceImpl2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\r\n						when <span class=\"token number\">3</span><span class=\"token operator\">:</span>\r\n								<span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token function\">serviceImpl3</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\r\n					<span class=\"token punctuation\">}</span>\r\n				<span class=\"token punctuation\">}</span>\r\n				<span aria-hidden=\"true\" class=\"line-numbers-rows\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><div class=\"toolbar\"><div class=\"toolbar-item\"><span>Java</span></div><div class=\"toolbar-item\"><button>Copy</button></div></div></div>\r\n				<h2 id=\"将一个类声明为spring的bean的注解有哪些\">将一个类声明为Spring的bean的注解有哪些？</h2>\r\n				<p>我们一般使用@Autowired注解自动装配bean，要想把类标识成可用于@Autowired注解自动装配的bean的类，采用以下注解可实现：</p>\r\n				<ul>\r\n				<li><code>@Component</code>：通用的注解，可标注任意类为Spring组件。如果一一个Bean不知道属于哪个层，可以使用<code>@Component</code>注解标注。</li>\r\n				<li><code>@Repository</code>：对应持久层即Dao层，主要用于数据库相关操作。</li>\r\n				<li><code>@Service</code>：对应服务层，主要涉及一-些复杂的逻辑，需要用到Dao层。</li>\r\n				<li><code>@Controller</code>：对应Spring MVC控制层，主要用户接受用户请求并调用Service层返回数据给前端页面。.</li>\r\n				</ul>\r\n				<h2 id=\"bean的生命周期\">bean的生命周期</h2>\r\n				<blockquote>\r\n				<p>整理自 <a href=\"https://yemengying.com/2016/07/14/spring-bean-life-cycle/\">https://yemengying.com/2016/07/14/spring-bean-life-cycle/</a></p>\r\n				</blockquote>\r\n				<ul>\r\n				<li>Bean容器找到配置文件中Spring Bean的定义。</li>\r\n				<li>Bean容器利用Java Reflection API创建一个Bean的实例。</li>\r\n				<li>如果涉及到一些属性值利用set方法设置一些属性值。</li>\r\n				<li>如果Bean实现了<code>BeanNameAware</code>接口，调用<code>setBeanName()</code>方法,传入Bean的名字。</li>\r\n				<li>如果Bean实现了<code>BeanClassLoaderAware</code>接口，调用<code>setBeanClassLoader()</code>方法， 传入<code>ClassLoader</code>对象的实例。</li>\r\n				<li>如果Bean实现了<code>BeanFactoryAware</code>接口，调用<code>setBeanClassLoader()</code>方法, 传入<code>ClassLoader</code>对象的实例。</li>\r\n				<li>与上面的类似，如果实现了其他<code>Aware</code>接口，就调用相应的方法。</li>\r\n				<li>如果有和加载这个Bean的Spring容器相关的<code>BeanPostProcessor</code>对象，执行<code>postProcessBeforelnitialization()</code>方法</li>\r\n				<li>如果Bean实现了<code>InitializingBean</code>接口，执行<code>afterPropertiesSet()</code>方法。</li>\r\n				<li>如果Bean在配置文件中的定义包含<code>init- method</code>属性,执行指定的方法。</li>\r\n				<li>如果有和加载这个Bean的Spring容器相关的<code>BeanPostProcessor</code>对象，执行<code>postProcessAfterlnitialization()</code>方法。</li>\r\n				<li>当要销毁Bean的时候，如果Bean实现了<code>DisposableBean</code>接口，执行<code>destroy()</code>方法。</li>\r\n				<li>当要销毁Bean的时候，如果Bean在配置文件中的定义包含<code>destroy-method</code>属性,执行指定的方法。</li>\r\n				</ul>\r\n				<h2 id=\"bean的作用域\">bean的作用域</h2>\r\n				<ul>\r\n				<li><code>singleton</code> : 唯一 bean 实例，Spring 中的 bean 默认都是单例的。</li>\r\n				<li><code>prototype</code> : 每次请求都会创建一个新的 bean 实例。</li>\r\n				<li><code>request</code> : 每一次HTTP请求都会产生一个新的bean，该bean仅在当前HTTP request内有效。</li>\r\n				<li><code>session</code> : 每一次HTTP请求都会产生一个新的 bean，该bean仅在当前 HTTP session 内有效。</li>\r\n				<li><code>global-session</code>： 全局session作用域，仅仅在基于portlet的web应用中才有意义，Spring5已经没有了。Portlet是能够生成语义代码(例如：HTML)片段的小型Java Web插件。它们基于portlet容器，可以像servlet一样处理HTTP请求。但是，与 servlet 不同，每个 portlet 都有不同的会话。</li>\r\n				</ul>\r\n				<h1 id=\"spring-mvc\">Spring MVC</h1>\r\n				<p>MVC是-一种设计模式,Spring MVC是一款很优秀的MVC框架。Spring MVC可以帮助我们进行更简洁的Web层的开发，并且它天生与Spring框架集成。Spring MVC下我们一般把后端项目分为Service层(处理业务)、Dao层( 数据库操作)、Entity层 (实体类)、Controller层(控制层，返回数据给前台页面)。</p>\r\n				<h2 id=\"执行流程\">执行流程</h2>\r\n				<ol>\r\n				<li>\r\n				<p>客户端(浏览器) 发送请求，直接请求到<code>DispatcherServlet</code>。</p>\r\n				</li>\r\n				<li>\r\n				<p><code>DispatcherServlet</code>根据请求信息调用<code>HandlerMapping</code>，解析请求对应的Handler。</p>\r\n				</li>\r\n				<li>\r\n				<p>解析到对应的Handler (也就是我们平常说的Controller控制器)后，开始由<code>HandlerAdapter</code>适配器处理。</p>\r\n				</li>\r\n				<li>\r\n				<p><code>HandlerAdapter</code>会根据Handler来调用真正的处理器开处理请求，并处理相应的业务逻辑。</p>\r\n				</li>\r\n				<li>\r\n				<p>处理器处理完业务后，会返回一个<code>ModelAndView</code>对象，<code>Model</code>是返回的数据对象， <code>View</code>是个逻辑上的View。</p>\r\n				</li>\r\n				<li>\r\n				<p><code>ViewResolver</code>会根据逻辑<code>View</code>查找实际的<code>View</code>。</p>\r\n				</li>\r\n				<li>\r\n				<p><code>DispaterServlet</code>把返回的<code>Model</code>传给<code>View</code> ( 视图渲染)。</p>\r\n				</li>\r\n				<li>\r\n				<p>把 <code>View</code> 返回给浏览器。</p>\r\n				</li>\r\n				</ol>\r\n				<h1 id=\"spring中用到了哪些设计模式\">Spring中用到了哪些设计模式？</h1>\r\n				<ul>\r\n				<li>工厂设计模式: Spring使用工厂模式通过<code>BeanFactory</code>、<code>ApplicationContext</code> 创建bean对象。</li>\r\n				<li>代理设计模式: Spring AOP功能的实现。</li>\r\n				<li>单例设计模式: Spring中的Bean默认都是单例的。</li>\r\n				<li>包装器设计模式:我们的项目需要连接多个数据库，而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。</li>\r\n				<li>观察者模式: Spring事件驱动模型就是观察者模式很经典的一一个应用。</li>\r\n				<li>适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式、Spring MVC中也是用到了适配器模式适配Controller。</li>\r\n				</ul>\r\n				<h1 id=\"spring-事务\">Spring 事务</h1>\r\n				<h2 id=\"spring-事务管理的方式\">Spring 事务管理的方式</h2>\r\n				<ol>\r\n				<li>编程式事务，在代码中硬编码（不推荐）</li>\r\n				<li>声明式事务，在配置文件中配置（推荐使用）\r\n				<ul>\r\n				<li>基于 XML 的声明式事务</li>\r\n				<li>基于注解的声明式事务</li>\r\n				</ul>\r\n				</li>\r\n				</ol>\r\n				<h2 id=\"spring-事务中的隔离级别\">Spring 事务中的隔离级别</h2>\r\n				<p><strong>TransactionDefinition 接口中定义了五个表示隔离级别的常量：</strong></p>\r\n				<ul>\r\n				<li><strong>TransactionDefinition.ISOLATION_DEFAULT:</strong> 使用后端数据库默认的隔离级别，Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别.</li>\r\n				<li><strong>TransactionDefinition.ISOLATION_READ_UNCOMMITTED:</strong> 最低的隔离级别，允许读取尚未提交的数据变更，<strong>可能会导致脏读、幻读或不可重复读</strong></li>\r\n				<li><strong>TransactionDefinition.ISOLATION_READ_COMMITTED:</strong> 允许读取并发事务已经提交的数据，<strong>可以阻止脏读，但是幻读或不可重复读仍有可能发生</strong></li>\r\n				<li><strong>TransactionDefinition.ISOLATION_REPEATABLE_READ:</strong> 对同一字段的多次读取结果都是一致的，除非数据是被本身事务自己所修改，<strong>可以阻止脏读和不可重复读，但幻读仍有可能发生。</strong></li>\r\n				<li><strong>TransactionDefinition.ISOLATION_SERIALIZABLE:</strong> 最高的隔离级别，完全服从ACID的隔离级别。所有的事务依次逐个执行，这样事务之间就完全不可能产生干扰，也就是说，<strong>该级别可以防止脏读、不可重复读以及幻读</strong>。但是这将严重影响程序的性能。通常情况下也不会用到该级别。</li>\r\n				</ul>\r\n				<h2 id=\"spring-事务中的事务传播行为\">Spring 事务中的事务传播行为</h2>\r\n				<p><strong>支持当前事务的情况：</strong></p>\r\n				<ul>\r\n				<li>\r\n				<p><strong>TransactionDefinition.PROPAGATION_REQUIRED：</strong> 如果当前存在事务，则加入该事务；如果当前没有事务，则创建一个新的事务。</p>\r\n				</li>\r\n				<li>\r\n				<p><strong>TransactionDefinition.PROPAGATION_SUPPORTS：</strong> 如果当前存在事务，则加入该事务；如果当前没有事务，则以非事务的方式继续运行。</p>\r\n				</li>\r\n				<li>\r\n				<p><strong>TransactionDefinition.PROPAGATION_MANDATORY：</strong> 如果当前存在事务，则加入该事务；如果当前没有事务，则抛出异常。（mandatory：强制性）</p>\r\n				</li>\r\n				</ul>\r\n				<p><strong>不支持当前事务的情况：</strong></p>\r\n				<ul>\r\n				<li><strong>TransactionDefinition.PROPAGATION_REQUIRES_NEW：</strong> 创建一个新的事务，如果当前存在事务，则把当前事务挂起。</li>\r\n				<li><strong>TransactionDefinition.PROPAGATION_NOT_SUPPORTED：</strong> 以非事务方式运行，如果当前存在事务，则把当前事务挂起。</li>\r\n				<li><strong>TransactionDefinition.PROPAGATION_NEVER：</strong> 以非事务方式运行，如果当前存在事务，则抛出异常。</li>\r\n				</ul>\r\n				<p><strong>其他情况：</strong></p>\r\n				<ul>\r\n				<li><strong>TransactionDefinition.PROPAGATION_NESTED：</strong> 如果当前存在事务，则创建一个事务作为当前事务的嵌套事务来运行；如果当前没有事务，则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。</li>\r\n				</ul>\r\n				<h2 id=\"transactionalrollbackfor--exceptionclass注解\">@Transactional(rollbackFor = Exception.class)注解</h2>\r\n				<p>我们知道：Exception分为运行时异常RuntimeException和非运行时异常。事务管理对于企业应用来说是至关重要的，即使出现异常情况，它也可以保证数据的一致性。</p>\r\n				<p>当<code>@Transactional</code>注解作用于类上时，该类的所有 public 方法将都具有该类型的事务属性，同时，我们也可以在方法级别使用该标注来覆盖类级别的定义。如果类或者方法加了这个注解，那么这个类里面的方法抛出异常，就会回滚，数据库里面的数据也会回滚。</p>\r\n				<p>在<code>@Transactional</code>注解中如果不配置<code>rollbackFor</code>属性,那么事物只会在遇到<code>RuntimeException</code>的时候才会回滚,加上<code>rollbackFor=Exception.class</code>,可以让事物在遇到非运行时异常时也回滚。</p>\r\n				<h1 id=\"jpa\">JPA</h1>\r\n				<p>假设我们有下面这个类：</p>\r\n				<div class=\"code-toolbar\"><pre class=\"line-numbers language-java\"><code class=\" language-java\"><span class=\"token annotation punctuation\">@Entity</span><span class=\"token punctuation\">(</span>name<span class=\"token operator\">=</span><span class=\"token string\">\"USER\"</span><span class=\"token punctuation\">)</span>\r\n				<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">User</span> <span class=\"token punctuation\">{</span>\r\n				<span class=\"token annotation punctuation\">@Id</span>\r\n				<span class=\"token annotation punctuation\">@GeneratedValue</span><span class=\"token punctuation\">(</span>strategy <span class=\"token operator\">=</span> <span class=\"token class-name\">GenerationType</span><span class=\"token punctuation\">.</span>AUTO<span class=\"token punctuation\">)</span>\r\n				<span class=\"token annotation punctuation\">@Column</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"ID\"</span><span class=\"token punctuation\">)</span>\r\n				<span class=\"token keyword\">private</span> <span class=\"token class-name\">Long</span> id<span class=\"token punctuation\">;</span>\r\n				\r\n				<span class=\"token annotation punctuation\">@Column</span><span class=\"token punctuation\">(</span>name<span class=\"token operator\">=</span><span class=\"token string\">\"USERNAME\"</span><span class=\"token punctuation\">)</span>\r\n				<span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> username<span class=\"token punctuation\">;</span>\r\n				\r\n				<span class=\"token annotation punctuation\">@Column</span><span class=\"token punctuation\">(</span>name<span class=\"token operator\">=</span><span class=\"token string\">\"PASSWORD\"</span><span class=\"token punctuation\">)</span>\r\n				<span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> password<span class=\"token punctuation\">;</span>\r\n				\r\n				<span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> secrect<span class=\"token punctuation\">;</span>\r\n				<span class=\"token punctuation\">}</span>\r\n				<span aria-hidden=\"true\" class=\"line-numbers-rows\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><div class=\"toolbar\"><div class=\"toolbar-item\"><span>Java</span></div><div class=\"toolbar-item\"><button>Copy</button></div></div></div>\r\n				<p>如果我们想让<code>secrect</code> 这个字段不被持久化，也就是不被数据库存储怎么办？我们可以采用下面几种方法：</p>\r\n				<div class=\"code-toolbar\"><pre class=\"line-numbers language-java\"><code class=\" language-java\"><span class=\"token keyword\">static</span> <span class=\"token class-name\">String</span> transient1<span class=\"token punctuation\">;</span> <span class=\"token comment\">// not persistent because of static</span>\r\n\r\n				<span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> transient2 <span class=\"token operator\">=</span> “<span class=\"token class-name\">Satish</span>”<span class=\"token punctuation\">;</span> <span class=\"token comment\">// not persistent because of final</span>\r\n\r\n				<span class=\"token keyword\">transient</span> <span class=\"token class-name\">String</span> transient3<span class=\"token punctuation\">;</span> <span class=\"token comment\">// not persistent because of transient</span>\r\n\r\n				<span class=\"token annotation punctuation\">@Transient</span>\r\n				<span class=\"token class-name\">String</span> transient4<span class=\"token punctuation\">;</span> <span class=\"token comment\">// not persistent because of @Transient</span>\r\n				<span aria-hidden=\"true\" class=\"line-numbers-rows\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><div class=\"toolbar\"><div class=\"toolbar-item\"><span>Java</span></div><div class=\"toolbar-item\"><button>Copy</button></div></div></div>\r\n				<p>个人比较喜欢注解方式。</p>', 1, 'java');
INSERT INTO `t_blog` VALUES (40, '大学必须掌握的软件基础课程', ' 大学软件专业有很多课程，有些学生搞不清哪些是重点，以下是笔者根据多年经验，认真很重要的课程罗列下：1，C语言  很重要，作为学编程的入门语言，也是众多流行编程语言之父。2，数据结构和算法很重要，以后深入理解一些东西有帮助，即使是Java把很多数据结构都进行了封装，但是学习本课程，可以对性能有深入理解；3，计', '2020-08-03 12:41:52', 41, 0, '<p><img src=\"http://img.baidu.com/hi/jx2/j_0013.gif\"/>&nbsp;大学软件专业有很多课程，有些学生搞不清哪些是重点，以下是笔者根据多年经验，认真很重要的课程罗列下：</p><p><br/></p><p><span style=\"color: rgb(255, 0, 0);\"><strong>1，C语言 &nbsp;</strong></span></p><p>很重要，作为学编程的入门语言，也是众多流行编程语言之父。</p><p><br/></p><p><span style=\"color: rgb(255, 0, 0);\"><strong>2，数据结构和算法</strong></span></p><p>很重要，以后深入理解一些东西有帮助，即使是Java把很多数据结构都进行了封装，但是学习本课程，可以对性能有深入理解；</p><p><br/></p><p><span style=\"color: rgb(255, 0, 0);\"><strong>3，计算机组成原理</strong></span></p><p>一般，学习一下；</p><p><br/></p><p><span style=\"color: rgb(255, 0, 0);\"><strong>4，编译原理</strong></span></p><p>一般，学习一下；</p><p><br/></p><p><span style=\"color: rgb(255, 0, 0);\"><strong>5，数据库原理</strong></span></p><p>很重要，对以后系统的数据库设计有帮助，站的层次高；</p><p><br/></p><p><span style=\"color: rgb(255, 0, 0);\"><strong>6，操作系统原理</strong></span></p><p>很重要，对以后技术提供，和层次有帮助；</p><p><br/></p><p><span style=\"color: rgb(255, 0, 0);\"><strong>7，计算机网络</strong></span></p><p>一般，学习一下；</p><p><br/></p><p><span style=\"color: rgb(255, 0, 0);\"><strong>8，软件工程</strong></span></p><p>非常重要，对整个软件开发体系的熟悉，直接可以影响到一个技术人员的职业生涯；</p><p><br/></p><p><span style=\"color: rgb(255, 0, 0);\"><strong>9，计算机英语</strong></span></p><p>非常重要，有一些屌丝不重视，这个真的很重要，以后学习一些新技术的时候，有时候中文资源比较少，这时候学习，基本是直接看官方英文文档，假如英语不行，会很苦逼；</p><p><br/></p><p><strong><span style=\"color: rgb(255, 0, 0);\">10，英语</span></strong></p><p>非常重要，这个和上面的计算机英语有区别，计算机英语主要是一些专业词汇的中文专业翻译；而英语的话，是更加广泛的概念，最少要达到4级，最好6级。大学时候通读基本英文技术书籍，我推荐 Head First系列，以及Thining in Java；</p><p><br/></p><p>以上是我认为比较重要的10个课程。大家可以参考下。。可以有遗漏，大家可以评论留言。讨论交流。</p><p><br/></p><p><span style=\"color: rgb(255, 0, 0);\"><strong><br/></strong></span></p>', 4, '大学');
INSERT INTO `t_blog` VALUES (41, '大学里应该掌握的两个能力', '  根据我的经验，我总结了下，大学里掌握以下两种，毕业的时候，用人单位比较喜欢；第一种能力，自学能力；所谓自学能力，顾名思义，就是自我学习知识，技术的能力，这种能力，人与人之间的差距有大，就像有的人毕业能拿13K，有的人只能拿3K；这种能力如何培养呢？根据我的经验，没有捷径，就是多读书，多思考，多实践，还有就', '2020-08-05 13:14:53', 57, 1, '<p><br/></p><p><img src=\"http://img.baidu.com/hi/jx2/j_0003.gif\"/> &nbsp;根据我的经验，我总结了下，大学里掌握以下两种，毕业的时候，用人单位比较喜欢；</p><p><br/></p><p><strong><span style=\"color: rgb(255, 0, 0);\">第一种能力，自学能力；</span></strong></p><p>所谓自学能力，顾名思义，就是自我学习知识，技术的能力，这种能力，人与人之间的差距有大，就像有的人毕业能拿13K，有的人只能拿3K；</p><p>这种能力如何培养呢？</p><p>根据我的经验，没有捷径，就是多读书，多思考，多实践，还有就是稍微多做点笔记，多总结；</p><p>很多人自学能力差，大多数原因不是笨，是读书少，见识少。读书少，基础差，想学点新东西都吃力，底子问题；</p><p>学习方法方面，我有些心得；</p><p>有些二货拿到书，直接从头读到尾，而且不允许自己有遗漏，这个是一种效率很底下的学习方法；</p><p>我的建议如下：</p><p>第一：拿到一本书，先自己想想，是不是自己需要的书，网上多查查，这本书好不好，书的人写的，作者有牛逼的，也有比较渣；</p><p>第二：决定看一本书的时候，一定要先看目录大纲，把目录好好看看，这本书讲啥，章节的划分；然后脑海里有大体映像之后，再看具体章节；说简单点，就是先总后分；</p><p>第三：学习的时候，一定要做笔记，写总结；这样才会有提高；最好是写到自己的博客里；</p><p><br/></p><p><br/></p><p><strong><span style=\"color: rgb(255, 0, 0);\">第二种能力，分析问题和解决问题的能力；</span></strong></p><p>第二种能力，很关键，尤其是搞开发的人，这种能力直接关系到自己的前途；</p><p>比如组长或者项目经理给你一个需求，让你开发出来，我举个具体的例子，组长让你开发一个功能，从数据库取数据库，生成word，并且导出；</p><p>有些人一看这功能，顿时晕了，自己没搞过，老师没教过。无从下手。顿时感觉人生好迷茫；</p><p>这时候就是体现一个人分析问题和解决问题的能力了；</p><p>正常分析过程是这样的，首先是查询数据，然后生成一个word，页面请求，返回word文件流；这里涉及到生成word，可以通过百度关键字 java生成word；</p><p>可以看到有很多的技术方案，这时候，你再百度具体的方案的比较，当然也可以论坛，群里交流。比如velocity freemarker；找到方案后，就是学习这个技术，</p><p>这个就是上面的自学能力的体现，如何快速入门掌握，当然，这种简单的技术，直接搞点demo，运行下，很容易上手；不需要看书；</p><p>如何这种培养能力呢？</p><p>没有捷径，就是要多读书，多学习，多思考，以及最重要，多实践，多搞点小项目，搞的时候会遇到很多问题，设计问题，调试问题，技术方案问题等等；</p><p>遇到问题，解决问题。能力就是这样慢慢提高的。不是什么一下子就变成大神，除非你在做梦；<br/></p><p><br/></p><p><img src=\"http://img.baidu.com/hi/jx2/j_0013.gif\"/>加油吧。骚年们！</p><p><br/></p>', 4, '大学');
INSERT INTO `t_blog` VALUES (42, 'Mysql中文乱码问题解决', '有些学员经常遇到 项目jdbc获取数据库数据，中文乱码；这里给出一些解决方案：第一种，修改Mysql数据库编码，改成utf-8，默认是latin1 （推荐）； 如图，找到mysql安装，点mysql实例配置  一直点next知道下面这个界面：记住，前面那个圈 一点要点。。下拉框选utf8继续next直到：写你', '2020-08-01 13:29:33', 12, 0, '<p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">有些学员经常遇到 项目jdbc获取数据库数据，中文乱码；</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><br/></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">这里给出一些解决方案：</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><br/></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><span style=\"color: rgb(255, 0, 0);\">第一种，修改Mysql数据库编码，改成utf-8，默认是latin1 （推荐）；</span></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><img alt=\"QQ鍥剧墖20160202132103.png\" src=\"/static/userImages/20160202/1454390480343030776.png\" title=\"1454390480343030776.png\"/> 如图，找到mysql安装，点mysql实例配置</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><br/></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><img src=\"/static/userImages/20160202/1454390537171022264.jpg\" alt=\"1454390537171022264.jpg\"/></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">&nbsp;</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">&nbsp;一直点next知道下面这个界面：</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><img alt=\"QQ鍥剧墖20160202132310.png\" src=\"/static/userImages/20160202/1454390616812058607.png\" title=\"1454390616812058607.png\"/></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">记住，前面那个圈 一点要点。。下拉框选utf8</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><br/></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">继续next直到：</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><img alt=\"QQ鍥剧墖20160202132431.png\" src=\"/static/userImages/20160202/1454390692687028654.png\" title=\"1454390692687028654.png\"/></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">写你原来的密码继续，然后继续Next:</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><img alt=\"QQ鍥剧墖20160202132517.png\" src=\"/static/userImages/20160202/1454390731515038389.png\" title=\"1454390731515038389.png\"/></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">点击 执行</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><img alt=\"QQ鍥剧墖20160202132618.png\" src=\"/static/userImages/20160202/1454390793796097934.png\" title=\"1454390793796097934.png\"/></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">这样就OK了；</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><br/></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">这个执行完。记得要把原来导入的项目数据库删除，重新的导入下即可；<br/></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><br/><span style=\"color: rgb(255, 0, 0);\"></span></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\"><span style=\"color: rgb(255, 0, 0);\">第二种，修改jdbc请求url 指定编码 （不推荐）<br/></span></p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">在jdbc url后面 加上 ?useUnicode=true&amp;characterEncoding=UTF8 指定下编码；</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">假如是在xml配置文件里 要转义下 搞成 ?useUnicode=true&amp;amp;characterEncoding=UTF-8 ；</p><p style=\"margin: 5px 0px; color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;\">比如在spring配置文件里：</p><pre class=\"brush:xml;toolbar:false\">&lt;!--&nbsp;配置数据源&nbsp;--&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;id=&quot;dataSource&quot;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class=&quot;com.alibaba.druid.pool.DruidDataSource&quot;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=&quot;url&quot;&nbsp;value=&quot;jdbc:mysql://localhost:3306/db_blog?useUnicode=true&amp;amp;characterEncoding=UTF-8&quot;/&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=&quot;username&quot;&nbsp;value=&quot;root&quot;/&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=&quot;password&quot;&nbsp;value=&quot;123456&quot;/&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;</pre><p><br/></p><p>推荐第一种；</p><p><br/></p>', 2, 'mysql 乱码');
INSERT INTO `t_blog` VALUES (45, 'shiro介绍以及推荐视频教程', 'shiro是apache提供的强大而灵活的开源安全框架，它主要用来处理身份认证，授权，企业会话管理和加密。shiro功能：用户验证、用户执行访问权限控制、在任何环境下使用session API，如cs程序。可以使用多数据源如同时使用oracle、mysql。单点登录(sso)支持。remember me服务。', '2018-12-01 17:00:30', 15, 0, '<p>shiro是apache提供的强大而灵活的开源安全框架，它主要用来处理身份认证，授权，企业会话管理和加密。</p><p>shiro功能：用户验证、用户执行访问权限控制、在任何环境下使用session API，如cs程序。可以使用多数据源如同时使用oracle、mysql。单点登录(sso)支持。remember me服务。</p><p><br/></p><p>推荐视频教程 一头扎进shiro&nbsp;</p><p>课程目录：<span class=\"Apple-tab-span\" style=\"white-space: pre;\">	</span><a href=\"http://www.java1234.com/zy032.html\" target=\"_blank\" title=\"http://www.java1234.com/zy032.html\">http://www.java1234.com/zy032.html</a><span class=\"Apple-tab-span\" style=\"white-space: pre;\">	</span></p><p>百度云打包下载： &nbsp;<a href=\"http://pan.baidu.com/s/1ntEifgt\" target=\"_blank\" title=\"http://pan.baidu.com/s/1ntEifgt\">http://pan.baidu.com/s/1ntEifgt</a></p>', 7, 'shiro java');
INSERT INTO `t_blog` VALUES (48, '百度云资源，是程序员们的发家致富一块肥肉', '  百度云在前两年的“云大战”中，最终获胜，当年各种云盘，相互厮杀，有技术方面的，有公关方面的原因，最终还是百度云大获全胜；  百度云经过几年的发展，逐渐成熟，性能稳定。开始的时候是不考虑盈利的，无广告。一直花钱投入，立志把这个云技术项目做好。时间证明了一切，百度云是一个优秀的，用户量最大的，资源最多，并且处', '2019-12-01 18:49:15', 19, 0, '<p>&nbsp; 百度云在前两年的“云大战”中，最终获胜，当年各种云盘，相互厮杀，有技术方面的，有公关方面的原因，最终还是百度云大获全胜；</p><p>&nbsp; 百度云经过几年的发展，逐渐成熟，性能稳定。开始的时候是不考虑盈利的，无广告。一直花钱投入，立志把这个云技术项目做好。时间证明了一切，百度云是一个优秀的，用户量最大的，资源最多，</p><p>并且处理违法信息的手段都是成熟的。</p><p>&nbsp; 大家看了标题也许有疑问，“百度云资源，是程序员们的发家致富一块肥肉” 根本原因是百度云拥有海量的用户分享的资源， 但为什么是程序员的肥肉呢。据本人观察，中国至少有500家网站吃到百度云这块肥肉，一种一家就是我，<a href=\"http://pan.java1234.com/\" target=\"_blank\" title=\"http://pan.java1234.com/\">http://pan.java1234.com/</a></p><p>我这个项目，主要是利用谷歌自定义搜索，来搜索用户需要的资源。日IP 2万左右，但是钱赚得不多。</p><p>&nbsp;下面我来谈谈如何利用百度云来赚钱，这里只针对程序员，因为只有程序员有技术来实现。说简单点，就是百度云的海量资源，程序员们可以看作是海量的页面，可以拿过来，搞成自己的资源页面。这样自己搞的站点，就拥有了海量的页面，只要seo搞得还行，一天搞个几万个流量，甚至几十万流量都没问题。然后挂google广告，百度联盟广告，我看到过类似网站，成功申请到谷歌广告，百度联盟广告的。</p><p>&nbsp;这块蛋糕，以后肯定会被越来越多的程序员看重，并且分享。但是我个人觉得，这块蛋糕非常大，大得我估计能养活10万个程序员。<img src=\"http://img.baidu.com/hi/jx2/j_0005.gif\"/> 当然有些人觉得我吹牛逼，其实我说的还是保守的值。</p><p>&nbsp;下面我来分析下，如何来搞这个项目 要用到哪些技术，传统的php ,asp.net,jsp 都可以来实现这项目。我自己也去看了人家的实现，核心的是采集技术，怎么个采集法呢，不是随便瞎搞的，一条比较好的方法是先去采集百度云分享达人的帐号，然后挨个的采集他们的分享资源。就是搞这个项目，说实话，要花不少时间，就是在采集资源这块。我估计有不少程序员是全职搞这个项目的，我上次看到几个，根据流量和广告。我估计他们一个月至少有2，3万。流量很大。采集到数据后，然后就是显示，这个再简单不过了。作为程序员，如果连这个都不会，那只能称技术员了。</p><p>&nbsp;&nbsp;</p><p>&nbsp; 好了，今天就把这个牛逼蛋糕介绍到这里，希望大家看到我这个文章，假如技术上满足条件，可以试着业余先搞搞。或许你从此屌炸天了。</p><p><br/></p><p><img src=\"/static/userImages/20160204/1454582940339078791.jpg\" title=\"1454582940339078791.jpg\" alt=\"QQ鎴浘20160204184853.jpg\"/></p><p><br/></p><p><br/></p>', 4, '百度云 赚钱');
INSERT INTO `t_blog` VALUES (50, '使用Jsoup解析出html中的img元素', 'jsoup 是一款Java 的HTML解析器，可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API，可通过DOM，CSS以及类似于jQuery的操作方法来取出和操作数据。博客项目有个需求。展示博客列表的时候，显示一些博客里的图片，增强用户体验；这里的话，有两种方案，第一种 是在后台处理，把', '2020-04-01 12:52:43', 22, 0, '<p><span style=\"color: rgb(51, 51, 51); font-family: arial, 宋体, sans-serif; font-size: 14px; line-height: 24px; text-indent: 28px; background-color: rgb(255, 255, 255);\">jsoup 是一款Java 的HTML解析器，可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API，可通过DOM，CSS以及类似于jQuery的操作方法来取出和操作数据。</span></p><p><img src=\"/static/userImages/20160214/1455425736515085353.jpg\" title=\"1455425736515085353.jpg\" alt=\"QQ鎴浘20160214125257.jpg\"/></p><p><span style=\"color: rgb(51, 51, 51); font-family: arial, 宋体, sans-serif; font-size: 14px; line-height: 24px; text-indent: 28px; background-color: rgb(255, 255, 255);\"><br/></span></p><p><span style=\"color: rgb(51, 51, 51); font-family: arial, 宋体, sans-serif; font-size: 14px; line-height: 24px; text-indent: 28px; background-color: rgb(255, 255, 255);\">博客项目有个需求。展示博客列表的时候，显示一些博客里的图片，增强用户体验；</span></p><p>这里的话，有两种方案，第一种 是在后台处理，把解析好的图片存集合里，然后转发到页面，遍历显示；还有一种是把博客内容送到页面，用Jquery处理。</p><p>我考虑了下。还是在后台处理好比较好，因为项目本身用到了 cnd加速，所以在前端处理反而影响效率。</p><p>在后端处理，可以使用Jsoup，很方便；</p><p><br/></p><p>Jsoup主页：<a href=\"http://jsoup.org/\" target=\"_blank\" title=\"http://jsoup.org/\">http://jsoup.org/</a></p><p><br/></p><p>maven地址：</p><pre class=\"brush:xml;toolbar:false\">&lt;dependency&gt;\n		&lt;groupId&gt;org.jsoup&lt;/groupId&gt;\n		&lt;artifactId&gt;jsoup&lt;/artifactId&gt;\n		&lt;version&gt;1.8.3&lt;/version&gt;\n	&lt;/dependency&gt;</pre><p><br/></p><p><br/></p><p>这里给下关键代码：</p><pre class=\"brush:java;toolbar:false\">for(Blog&nbsp;blog:blogList){\n			List&lt;String&gt;&nbsp;imagesList=blog.getImagesList();\n			String&nbsp;blogInfo=blog.getContent();\n			Document&nbsp;doc=Jsoup.parse(blogInfo);\n			Elements&nbsp;jpgs=doc.select(&quot;img[src$=.jpg]&quot;);&nbsp;//　查找扩展名是jpg的图片\n			for(int&nbsp;i=0;i&lt;jpgs.size();i++){\n				Element&nbsp;jpg=jpgs.get(i);\n				imagesList.add(jpg.toString());\n				if(i==2){\n					break;\n				}\n			}\n		}</pre><p><br/></p><p>主要涉及到一些选择器。不难。大家可以参考下官方文档。或者百度很容易上手。</p><p><br/></p>', 10, 'jsoup java');
INSERT INTO `t_blog` VALUES (53, 'CXF处理JavaBean以及复合类型', '前面讲的是处理简单类型，今天这里来讲下CXF处理JavaBean以及复合类型，比如集合；这里实例是客户端传一个JavaBean，服务器端返回集合类型；在原来的项目实例基础上，我们先创建一个实体类User:package com.java1234.entity;/** * 用户实体类 * @author Adm', '2019-08-01 10:31:19', 10, 0, '<p>前面讲的是处理简单类型，今天这里来讲下CXF处理JavaBean以及复合类型，比如集合；</p><p><br/></p><p>这里实例是客户端传一个JavaBean，服务器端返回集合类型；</p><p><br/></p><p>在原来的项目实例基础上，我们先创建一个实体类User:<br/></p><pre class=\"brush:java;toolbar:false\">package&nbsp;com.java1234.entity;\n\n/**\n&nbsp;*&nbsp;用户实体类\n&nbsp;*&nbsp;@author&nbsp;Administrator\n&nbsp;*\n&nbsp;*/\npublic&nbsp;class&nbsp;User&nbsp;{\n\n	private&nbsp;Integer&nbsp;id;&nbsp;//&nbsp;编号\n	private&nbsp;String&nbsp;userName;&nbsp;//&nbsp;用户名\n	private&nbsp;String&nbsp;password;&nbsp;//&nbsp;密码\n	\n	public&nbsp;Integer&nbsp;getId()&nbsp;{\n		return&nbsp;id;\n	}\n	public&nbsp;void&nbsp;setId(Integer&nbsp;id)&nbsp;{\n		this.id&nbsp;=&nbsp;id;\n	}\n	public&nbsp;String&nbsp;getUserName()&nbsp;{\n		return&nbsp;userName;\n	}\n	public&nbsp;void&nbsp;setUserName(String&nbsp;userName)&nbsp;{\n		this.userName&nbsp;=&nbsp;userName;\n	}\n	public&nbsp;String&nbsp;getPassword()&nbsp;{\n		return&nbsp;password;\n	}\n	public&nbsp;void&nbsp;setPassword(String&nbsp;password)&nbsp;{\n		this.password&nbsp;=&nbsp;password;\n	}\n	\n	\n}</pre><p><br/></p><p>再创建一个Role实体类：</p><pre class=\"brush:java;toolbar:false\">package&nbsp;com.java1234.entity;\n\n/**\n&nbsp;*&nbsp;角色实体\n&nbsp;*&nbsp;@author&nbsp;Administrator\n&nbsp;*\n&nbsp;*/\npublic&nbsp;class&nbsp;Role&nbsp;{\n\n	private&nbsp;Integer&nbsp;id;&nbsp;//&nbsp;编号\n	private&nbsp;String&nbsp;roleName;&nbsp;//&nbsp;角色名称\n	\n	\n	\n	public&nbsp;Role()&nbsp;{\n		super();\n		//&nbsp;TODO&nbsp;Auto-generated&nbsp;constructor&nbsp;stub\n	}\n	\n	\n	\n	public&nbsp;Role(Integer&nbsp;id,&nbsp;String&nbsp;roleName)&nbsp;{\n		super();\n		this.id&nbsp;=&nbsp;id;\n		this.roleName&nbsp;=&nbsp;roleName;\n	}\n\n\n\n	public&nbsp;Integer&nbsp;getId()&nbsp;{\n		return&nbsp;id;\n	}\n	public&nbsp;void&nbsp;setId(Integer&nbsp;id)&nbsp;{\n		this.id&nbsp;=&nbsp;id;\n	}\n	public&nbsp;String&nbsp;getRoleName()&nbsp;{\n		return&nbsp;roleName;\n	}\n	public&nbsp;void&nbsp;setRoleName(String&nbsp;roleName)&nbsp;{\n		this.roleName&nbsp;=&nbsp;roleName;\n	}\n	\n	\n}</pre><p><br/></p><p><br/></p><p>然后HelloWorld再加一个接口方法getRoleByUser，通过用户查找角色：<br/></p><pre class=\"brush:java;toolbar:false\">package&nbsp;com.java1234.webservice;\n\nimport&nbsp;java.util.List;\n\nimport&nbsp;javax.jws.WebService;\n\nimport&nbsp;com.java1234.entity.Role;\nimport&nbsp;com.java1234.entity.User;\n\n@WebService\npublic&nbsp;interface&nbsp;HelloWorld&nbsp;{\n\n	public&nbsp;String&nbsp;say(String&nbsp;str);\n	\n	public&nbsp;List&lt;Role&gt;&nbsp;getRoleByUser(User&nbsp;user);\n}</pre><p><br/></p><p><br/></p><p>然后HelloWorld接口实现类 HelloWorldImpl写下新增的方法的具体实现，我们这里写死，模拟下即可：<br/></p><pre class=\"brush:java;toolbar:false\">package&nbsp;com.java1234.webservice.impl;\n\nimport&nbsp;java.util.ArrayList;\nimport&nbsp;java.util.List;\n\nimport&nbsp;javax.jws.WebService;\n\nimport&nbsp;com.java1234.entity.Role;\nimport&nbsp;com.java1234.entity.User;\nimport&nbsp;com.java1234.webservice.HelloWorld;\n\n@WebService\npublic&nbsp;class&nbsp;HelloWorldImpl&nbsp;implements&nbsp;HelloWorld{\n\n	public&nbsp;String&nbsp;say(String&nbsp;str)&nbsp;{\n		return&nbsp;&quot;Hello&nbsp;&quot;+str;\n	}\n\n	public&nbsp;List&lt;Role&gt;&nbsp;getRoleByUser(User&nbsp;user)&nbsp;{\n		List&lt;Role&gt;&nbsp;roleList=new&nbsp;ArrayList&lt;Role&gt;();\n		//&nbsp;模拟&nbsp;直接写死\n		if(user!=null){\n			if(user.getUserName().equals(&quot;java1234&quot;)&nbsp;&amp;&amp;&nbsp;user.getPassword().equals(&quot;123456&quot;)){\n				roleList.add(new&nbsp;Role(1,&quot;技术总监&quot;));\n				roleList.add(new&nbsp;Role(2,&quot;架构师&quot;));\n			}else&nbsp;if(user.getUserName().equals(&quot;jack&quot;)&nbsp;&amp;&amp;&nbsp;user.getPassword().equals(&quot;123456&quot;)){\n				roleList.add(new&nbsp;Role(3,&quot;程序员&quot;));\n			}\n			return&nbsp;roleList;\n		}else{\n			return&nbsp;null;			\n		}\n		\n	}\n	\n	\n\n}</pre><p><br/></p><p>服务端其他地方不用动；<br/></p><p><br/></p><p>下面我们来处理下客户端，和前面讲的一样。我们用wsdl2java工具重新生成代码，这里就不再讲；</p><p><br/></p><p><img src=\"/static/userImages/20160218/1455762437448028677.jpg\" title=\"1455762437448028677.jpg\" alt=\"QQ鎴浘20160218103035.jpg\"/></p><p><br/></p><p>这里我看到，实体类，以及接口实现，代码都生成了。</p><p><br/></p><p>我们改下Client类：</p><pre class=\"brush:java;toolbar:false\">package&nbsp;com.java1234.webservice;\n\nimport&nbsp;java.util.List;\n\npublic&nbsp;class&nbsp;Client&nbsp;{\n\n	public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{\n		HelloWorldService&nbsp;service=new&nbsp;HelloWorldService();\n		HelloWorld&nbsp;helloWorld=service.getHelloWorldPort();\n		//System.out.println(helloWorld.say(&quot;java1234&quot;));\n		User&nbsp;user=new&nbsp;User();\n		user.setUserName(&quot;jack&quot;);\n		user.setPassword(&quot;123456&quot;);\n		List&lt;Role&gt;&nbsp;roleList=helloWorld.getRoleByUser(user);\n		for(Role&nbsp;role:roleList){\n			System.out.println(role.getId()+&quot;,&quot;+role.getRoleName());\n		}\n	}\n}</pre><p><br/></p><p>运行截图：<br/></p><p><img src=\"/static/userImages/20160218/1455762521698070806.jpg\" title=\"1455762521698070806.jpg\" alt=\"QQ鎴浘20160218103159.jpg\"/></p><p><br/></p><p>完整代码：<a href=\"http://pan.baidu.com/s/1c1drMYO\" target=\"_blank\" title=\"http://pan.baidu.com/s/1c1drMYO\">http://pan.baidu.com/s/1c1drMYO</a></p><p><br/></p>', 9, 'webservice cxf');
INSERT INTO `t_blog` VALUES (90, '需要修改的小bug', '（1）、使用GitHub上的一套SpringBoot开源后端系统：（http://47.99.218.99:8080/springboot_v2/admin/login 账号:admin 密码:admin）进行二次改造作为该博客后台使用，原博客后台管理系统太单调。（2）、jsp页面性能差，需要做个redis缓存，提高访问性能。（3）、评论数量，博客文章的评论需要审核通过才可以在博客下面显示。--> 已完成（4）、后台关于博主功能完善。--> 已完成（5）、友情链接单调、需修改。--> 已完成（6）、后台评论信息提示框需完善。--> 已完成（7）、后台修改', '2020-09-21 15:41:18', 154, 1, '<p><br/></p><p><span style=\"background-color: rgb(255, 255, 255);\">（1）、使用GitHub上的一套SpringBoot开源后端系统：（</span><span style=\"text-decoration-line: underline; box-sizing: border-box; background: rgb(255, 255, 255); color: rgb(9, 94, 171); cursor: pointer; overflow-wrap: break-word;\"><a href=\"http://47.99.218.99:8080/springboot_v2/\" style=\"box-sizing: border-box; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: rgb(9, 94, 171); cursor: pointer; overflow-wrap: break-word;\">http://47.99.218.99:8080/springboot_v2/</a>admin/login</span><span style=\"background-color: rgb(255, 255, 255);\">&nbsp;账号:admin 密码:admin）进行二次改造作为该博客后台使用，原博客后台管理系统太单调。</span></p><p>（2）、jsp页面性能差，需要做个redis缓存，提高访问性能。</p><p><span style=\"background-color: rgb(146, 208, 80);\"><span style=\"background-color: rgb(255, 255, 255);\">（3）、评论数量，博客文章的评论需要审核通过才可以在博客下面显示。--&gt;&nbsp;<span style=\"background-color: rgb(146, 208, 80);\">已完成</span></span></span></p><p>（4）、后台关于博主功能完善。--&gt;&nbsp;<span style=\"background-color: rgb(146, 208, 80);\">已完成</span></p><p>（5）、友情链接单调、需修改。--&gt;&nbsp;<span style=\"background-color: rgb(146, 208, 80);\">已完成</span></p><p>（6）、后台评论信息提示框需完善。--&gt;&nbsp;<span style=\"background-color: rgb(146, 208, 80);\">已完成</span></p><p>（7）、后台修改密码的js弹窗换成layui弹出窗。--&gt; <span style=\"text-decoration: none; background-color: rgb(146, 208, 80);\">已完成</span></p><p>（8）、后台博客列表中的博客标题修改成可以点击跳转到该博客文章。--&gt;&nbsp;<span style=\"background-color: rgb(146, 208, 80);\">已完成</span></p><p>（9）、写完博客后的内容需截取一段作为摘要，用于前端页面的显示。--&gt;&nbsp;<span style=\"background-color: rgb(146, 208, 80);\"><span style=\"background-color: rgb(146, 208, 80);\">已完成</span></span></p><p>（10）、后台个人信息的修改，如果未修改图片，则该图片上传为空，需要后台做个判断。<span style=\"background-color: rgb(255, 255, 255);\">--&gt;&nbsp;<span style=\"background-color: rgb(146, 208, 80);\">已完成</span></span></p><p><span style=\"background-color: rgb(255, 255, 255);\">（11）、前端发表评论，请求后台时的</span><span style=\"background-color: rgb(255, 255, 0);\">模型和视图</span>转发<span style=\"background-color: rgb(255, 255, 255);\">改为Ajax请求，后台只需返回数据，不需要返回视图。--&gt;&nbsp;<span style=\"background-color: rgb(146, 208, 80);\">已完成</span></span></p><p><span style=\"background-color: rgb(255, 255, 255);\"></span><br/></p>', 5, 'bug');
INSERT INTO `t_blog` VALUES (95, 'SpringCloud微服务组件', '	Spring Cloud是一系列框架的	有序集合	。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发，如服务发现注册、配置中心、消', '2021-02-04 03:20:23', 0, 0, '<h2>	<span style=\"color: rgb(51, 51, 51);\">Spring Cloud是一系列框架的</span>	<a href=\"https://baike.baidu.com/item/%E6%9C%89%E5%BA%8F%E9%9B%86%E5%90%88/994839\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"color: rgb(19, 110, 194);\">有序集合</a>	<span style=\"color: rgb(51, 51, 51);\">。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发，如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等，都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子，它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来，通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理，最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。</span></h2>', 1, 'Eureka、Zookeeper、Nacos');
INSERT INTO `t_blog` VALUES (117, 'SpringCloud', '	Spring Cloud是一系列框架的	有序集合	。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发，如服务发现注册、配置中心、消', '2021-02-04 07:36:40', 0, 0, '<h3>	<span style=\"color: rgb(51, 51, 51);\">Spring Cloud是一系列框架的</span>	<a href=\"https://baike.baidu.com/item/%E6%9C%89%E5%BA%8F%E9%9B%86%E5%90%88/994839\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"color: rgb(19, 110, 194);\">有序集合</a>	<span style=\"color: rgb(51, 51, 51);\">。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发，如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等，都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子，它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来，通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理，最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。</span></h3>', 1, 'Eureka、Zookeeper、Nacos');
COMMIT;

-- ----------------------------
-- Table structure for t_blogger
-- ----------------------------
DROP TABLE IF EXISTS `t_blogger`;
CREATE TABLE `t_blogger` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `password` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `profile` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `nickName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `sign` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `imageName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `roles` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

-- ----------------------------
-- Records of t_blogger
-- ----------------------------
BEGIN;
INSERT INTO `t_blogger` VALUES (1, 'java1234', '70f57208b804bd90d51fdac84afe6472', 'xx', 'Java1234_小锋2', '知识改变命运，技术改变世界2', 'xiaofeng.jpg', '普通用户');
INSERT INTO `t_blogger` VALUES (2, 'zhf', 'ef7892b96f93fe4644180359922ad433', '捕获.PNG', '小杰', '写代码是热爱，写到世界充满爱！', '1.png', '管理员');
INSERT INTO `t_blogger` VALUES (3, 'test', 'cb35360d64d80bf9210e0cff1ad5079e', 'zhfInfo13.PNG', '游客', '知识改变命运，技术改变世界', '1.png', '管理员');
COMMIT;

-- ----------------------------
-- Table structure for t_blogtype
-- ----------------------------
DROP TABLE IF EXISTS `t_blogtype`;
CREATE TABLE `t_blogtype` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `typeName` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `orderNo` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

-- ----------------------------
-- Records of t_blogtype
-- ----------------------------
BEGIN;
INSERT INTO `t_blogtype` VALUES (1, 'Spring', 1);
INSERT INTO `t_blogtype` VALUES (2, 'Mysql', 2);
INSERT INTO `t_blogtype` VALUES (3, 'Tomcat', 3);
INSERT INTO `t_blogtype` VALUES (4, 'IT之路', 44);
INSERT INTO `t_blogtype` VALUES (5, '随心生活', 7);
INSERT INTO `t_blogtype` VALUES (7, 'shiro', 4);
INSERT INTO `t_blogtype` VALUES (9, 'webservice', 5);
INSERT INTO `t_blogtype` VALUES (10, 'jsoup5', 4);
INSERT INTO `t_blogtype` VALUES (15, 'mybatis-plus', 8);
INSERT INTO `t_blogtype` VALUES (16, 'Eureka', 9);
INSERT INTO `t_blogtype` VALUES (17, 'Consul', 10);
INSERT INTO `t_blogtype` VALUES (20, 'OpenFeign', 11);
COMMIT;

-- ----------------------------
-- Table structure for t_click
-- ----------------------------
DROP TABLE IF EXISTS `t_click`;
CREATE TABLE `t_click` (
  `click` int(11) NOT NULL,
  PRIMARY KEY (`click`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;

-- ----------------------------
-- Records of t_click
-- ----------------------------
BEGIN;
INSERT INTO `t_click` VALUES (343);
COMMIT;

-- ----------------------------
-- Table structure for t_comment
-- ----------------------------
DROP TABLE IF EXISTS `t_comment`;
CREATE TABLE `t_comment` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `blogId` int(11) DEFAULT NULL,
  `date` datetime DEFAULT NULL,
  `state` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;

-- ----------------------------
-- Records of t_comment
-- ----------------------------
BEGIN;
INSERT INTO `t_comment` VALUES (25, '牛皮！！！', '113.104.33.182', 90, '2020-09-29 20:10:11', 1);
INSERT INTO `t_comment` VALUES (28, '测试评论！！！', '113.104.33.113', 41, '2020-11-03 16:20:59', 0);
COMMIT;

-- ----------------------------
-- Table structure for t_link
-- ----------------------------
DROP TABLE IF EXISTS `t_link`;
CREATE TABLE `t_link` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `linkName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `linkUrl` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `orderNo` int(11) DEFAULT NULL,
  `linkImage` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

-- ----------------------------
-- Records of t_link
-- ----------------------------
BEGIN;
INSERT INTO `t_link` VALUES (1, 'Java知识分享网', 'http://www.java1234.com/', 1, '20210104035349.jpg');
INSERT INTO `t_link` VALUES (2, '博客静态网页模板', 'https://github.com/feiyangbeyond/halo-theme-sagiri', 2, '20210104035357.jpg');
INSERT INTO `t_link` VALUES (3, 'Jar包-中央仓库', 'https://mvnrepository.com/', 3, '20210104035408.png');
INSERT INTO `t_link` VALUES (4, '免费logo在线制作', 'http://www.uugai.com/', 4, '20210104035414.jpeg');
INSERT INTO `t_link` VALUES (5, 'EasyUI中文站', 'https://www.jeasyui.cn/', 5, '20210104035420.jpg');
INSERT INTO `t_link` VALUES (6, '河源职业技术学院', 'http://www.hycollege.net', 6, '20210104035425.jpg');
INSERT INTO `t_link` VALUES (8, 'LayUI前端框架', 'https://www.layui.com', 7, '20210104035430.jpg');
COMMIT;

-- ----------------------------
-- Table structure for t_message
-- ----------------------------
DROP TABLE IF EXISTS `t_message`;
CREATE TABLE `t_message` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `date` date DEFAULT NULL,
  `state` int(11) DEFAULT NULL,
  `commentName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `sizeUrl` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;

-- ----------------------------
-- Records of t_message
-- ----------------------------
BEGIN;
INSERT INTO `t_message` VALUES (5, 'gfh', '2020-09-29', 1, '小杰', '344473866@qq.com', 'www.zhf943.top/zhf_blog');
INSERT INTO `t_message` VALUES (6, '测试1', '2020-11-03', 1, '朱某', '22222@qq.com', '');
COMMIT;

-- ----------------------------
-- Table structure for upload_file
-- ----------------------------
DROP TABLE IF EXISTS `upload_file`;
CREATE TABLE `upload_file` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `type` int(11) DEFAULT NULL COMMENT '文件类型',
  `url` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 'URL地址',
  `createDate` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=147 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='文件上传';

-- ----------------------------
-- Records of upload_file
-- ----------------------------
BEGIN;
INSERT INTO `upload_file` VALUES (144, 1, '3', '2018-05-25 15:20:04');
INSERT INTO `upload_file` VALUES (145, 1, '2', '2018-05-25 15:20:29');
INSERT INTO `upload_file` VALUES (146, 1, '1', '2018-05-25 15:21:16');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;
